/// 用于定于flutter和平台的桥接方法
/// @HostApi() 标记的，是用于 Flutter 调用原生的方法；
/// @FlutterApi() 标记的，是用于原生调用 Flutter 的方法；
/// @async 如果原生的方法，是异步回调那种，你就可以使用这个标记；
/// 在项目根目录，运行以下命令生成平台代码
/// dart run pigeon --input lib/pigeons/pigeon_ble_plugin.dart

import 'package:pigeon/pigeon.dart';

@ConfigurePigeon(PigeonOptions(
  input: 'lib/pigeons/pigeon_ble_plugin.dart',
  dartOut: 'lib/emind_home_ble_plugin.dart',
  dartOptions: DartOptions(),
  objcHeaderOut: 'ios/Classes/EmindHomeBLEPlugin.h',
  objcSourceOut: 'ios/Classes/EmindHomeBLEPlugin.m',
  objcOptions: ObjcOptions(),
  javaOut:
      'android/src/main/java/com/jdenergy/emindHome/ble_plugin/EmindHomeBLEPlugin.java',
  javaOptions: JavaOptions(package: "com.jdenergy.emindHome.ble_plugin"),
))
class StartConfigurationRequest {
  String? sn;
  String? ssid;
  String? password;
}

class LogMessage {
  String? message;
  String? dateTime;
}

@HostApi()
abstract class EmindHomeBlePlugin {
  ///初始化, 开始设置 Appkey
  @async
  bool initAndSetAppKey(String appKey);

  ///开始配网
  @async
  bool startConfiguration(StartConfigurationRequest request);

  ///获取最后一次配网日志
  List getLogsOfLastConfiguration();

  ///退出
  void exitConfiguration();

  ///添加日志
  ///message  日志信息
  LogMessage addLogWithMessage(String message);

  ///获取所有的日志
  List getAllLog();

  ///获取所有的日志内容
  List getAllLogMessages();

  ///删除所有的日志
  void removeAllLogs();

  ///蓝牙状态改变
  String getBLEBluetoothStateDidChange();

  ///蓝牙状态改变
  int getBluetoothState();

  ///是否初始化成功
  bool getBLESetupFinished();

  ///获取BLE版本
  String getBLEVersion();
}
